%pylab inline
Populating the interactive namespace from numpy and matplotlib
Feynman-féle pálya integrál (path integral)
Irodalom: Richard Feynman: QED – A megszilárdult fény, Scolar Kiadó, Budapest (2003)
def rajz(Xmin,Xmax,Nstep, d, hullhossz, szin):
r1=array([0,1]) # P pont koordinataja
r2=array([d,1]) # Q pont koordinataja
#Xmin,Xmax,Nstep=-12,12,57 # Tukor ket vegenek x koordinataja, es a felosztas szama
#Xmin,Xmax,Nstep=-12,-7,157
nyilhegy1=0.01 # nyilak hegyenek merete
szorzo = 2*pi/hullhossz
mintav = szorzo*norm(array([r1[0],-r1[1]])-r2)
xr=linspace(Xmin,Xmax,Nstep)
elist=[]
for x in xr:
tavs=szorzo*(norm(r1-array([x,0]))+norm(r2-array([x,0])))
#elist.append(array([cos(tavs-0*mintav),sin(tavs-0*mintav)]))
elist.append(array([cos(tavs-mintav),sin(tavs-mintav)]))
elist=[array([0,0])]+elist ## rogzitjuk az elso vektort (el is hagyhato)
#print('elist = ',elist)
eredo= sum(array(elist),axis=0);
lanc=cumsum(elist,axis=0)
x = lanc[:,0]
y = lanc[:,1]
figsize(8,8)
subplot(111,aspect='equal')
# https://stackoverflow.com/questions/7519467/line-plot-with-arrows
# lasd meg itt: Dropbox/programok/python/gyujtemeny.ipynb
quiver(x[:-1], y[:-1], x[1:]-x[:-1], y[1:]-y[:-1], color=szin,scale_units='xy', angles='xy', scale=1,
width=0.0035)
# ez is kell helyes plottolashoz:
plot(lanc[:,0],lanc[:,1], szin, lw=0.01)
nyilhegy2=0.02 #2.5*nyilhegy1 # az eredo nyil hegyenek merete
arreredo=dict(width=nyilhegy2,color='r',length_includes_head=True)
quiver(x[0],y[0],x[-1]-x[0],y[-1]-y[0], scale_units='xy', angles='xy', scale=1, width=0.005,color='k')
axis('off');
print('Az eredő vektor és a nagysága = ',eredo, norm(eredo)) ### ezzel is egyezik: array([x[-1]-x[0],y[-1]-y[0]])
#print('eredo 2 = ',x[0],x[-1],array([x[-1]-x[0],y[-1]-y[0]]))
return()
def palyak(Xmin,Xmax,Nstep, d, hullhossz, szin):
r1=array([0,1]) # P pont koordinataja
r2=array([d,1]) # Q pont koordinataja
#Xmin,Xmax,Nstep=-8,8,9 # Tukor ket vegenek x koordinataja, es a felosztas szama
#Xmin,Xmax,Nstep=-12,-7,157
xr=linspace(Xmin,Xmax,Nstep)
szorzo = 2*pi/hullhossz
mintav = szorzo*norm(array([r1[0],-r1[1]])-r2)
elist=[]
for x in xr:
tavs=szorzo*(norm(r1-array([x,0]))+norm(r2-array([x,0])))
#elist.append(array([cos(tavs-0*mintav),sin(tavs-0*mintav)]))
elist.append(array([cos(tavs-mintav),sin(tavs-mintav)]))
# palyak rajzolasa
fig, ax = plt.subplots(2, 1, figsize=(10, 10)) # , sharey=True
#fig.tight_layout(pad=5.0)
for i in range(len(xr)):
ax[0].plot([r1[0],xr[i],r2[0]],[r1[1],0,r2[1]],color='b')
ax[0].plot(xr,0*xr,color='k',lw=3)
ax[0].set_xlim(1.1*min(r1[0],Xmin),1.1*max(r2[0],Xmax))
ax[0].set_ylim(-0.1,1.1*r2[1])
#ax[0].set_xticklabels([])
ax[0].axis('on')
#nyilak rajzolasa a palyak ala
#nyilhegy1=0.009 # nyilak hegyenek merete
#arrowprops=dict(width=nyilhegy1,color='b',length_includes_head=True)
#for i in range(len(xr)):
# ax[1].arrow(xr[i],0,fact*elist[i][0],fact*elist[i][1],**arrowprops)
for i in range(len(xr)):
ax[1].quiver(xr[i], 0, 0*xr[i]+elist[i][0],0+ elist[i][1], color='r',width=0.0035,scale=7)
ax[1].plot(xr,0*xr,color='k',lw=1)
ax[1].set_xlim(1.1*min(r1[0],Xmin),1.1*max(r2[0],Xmax))
ax[1].set_ylim(-1,1);
#ax[1].set_yticklabels([])
#xticklabels = ax[0].get_xticklabels()+0*ax[1].get_xticklabels()
#setp(xticklabels, visible=False)
ax[1].axis('off');
return()
Nstep= 9
d=1.
xmin = -1.5*d
xmax = 2.5*d
hullhossz=0.8
print('nstep = ',Nstep)
print('xmin, xmax = ',xmin, xmax)
print('hullámhossz = ', hullhossz)
print('dx = ', (xmax-xmin)/Nstep)
#print('k_wave = ', 2*pi/hullhossz)
palyak(xmin,xmax,Nstep, d, hullhossz, 'b');
nstep = 9 xmin, xmax = -1.5 2.5 hullámhossz = 0.8 dx = 0.4444444444444444
rajz(xmin,xmax,Nstep, d, hullhossz, 'r');
Az eredő vektor és a nagysága = [ 3.69743702 -3.37713154] 5.007600014234347
Nstep= 31
d=1.
xmin = -1*d
xmax = 2*d
hullhossz=0.5
print('nstep = ',Nstep)
print('xmin, xmax = ',xmin, xmax)
print('hullámhossz = ', hullhossz)
print('dx = ', (xmax-xmin)/Nstep)
#print('k_wave = ', 2*pi/hullhossz)
palyak(xmin,xmax,Nstep, d, hullhossz, 'b');
nstep = 31 xmin, xmax = -1.0 2.0 hullámhossz = 0.5 dx = 0.0967741935483871
rajz(xmin,xmax,Nstep, d, hullhossz, 'r');
Az eredő vektor és a nagysága = [4.08179835 3.00495913] 5.068614909337434
Nstep = 300 # 300
d=1.
xmin = -1*d
xmax = 2*d
hullhossz=0.05
print('I. eset ----------- ')
print('nstep 1 = ',Nstep)
print('xmin, xmax = ',xmin, xmax)
print('hullámhossz = ', hullhossz)
print('dx = ', (xmax-xmin)/Nstep)
#print('k_wave = ', 2*pi/hullhossz)
rajz(xmin,xmax,Nstep, d, hullhossz, 'b')
Nstep = 500 # 500
xmin = -2*d
xmax = 3*d
print('\nII. eset ----------- ')
print('nstep 2 = ',Nstep)
print('xmin, xmax = ', xmin, xmax)
print('hullámhossz = ', hullhossz)
print('dx = ', (xmax-xmin)/Nstep)
#print('k_wave = ', 2*pi/hullhossz)
rajz(xmin,xmax,Nstep, d, hullhossz, 'r');
I. eset ----------- nstep 1 = 300 xmin, xmax = -1.0 2.0 hullámhossz = 0.05 dx = 0.01 Az eredő vektor és a nagysága = [13.57346515 14.28286314] 19.703784799821307 II. eset ----------- nstep 2 = 500 xmin, xmax = -2.0 3.0 hullámhossz = 0.05 dx = 0.01 Az eredő vektor és a nagysága = [13.6533507 14.17773348] 19.683041224716238
Nstep = 10
d=1.
xmin = -1*d
xmax = -0.5*d
hullhossz=0.05
print('nstep = ',Nstep)
print('xmin, xmax = ', xmax, xmin)
print('hullámhossz = ', hullhossz)
print('dx = ', (xmax-xmin)/Nstep)
#print('k_wave = ', 2*pi/hullhossz)
palyak(xmin,xmax,Nstep, d, hullhossz, 'b');
nstep = 10 xmin, xmax = -0.5 -1.0 hullámhossz = 0.05 dx = 0.05
Nstep = 50
d=1.
xmin = -1*d
xmax = -0.5*d
hullhossz=0.05
print('nstep = ',Nstep)
print('xmin, xmax = ', xmax, xmin)
print('hullámhossz = ', hullhossz)
print('dx = ', (xmax-xmin)/Nstep)
#print('k_wave = ', 2*pi/hullhossz)
rajz(xmin,xmax,Nstep, d, hullhossz, 'b');
nstep = 50 xmin, xmax = -0.5 -1.0 hullámhossz = 0.05 dx = 0.01 Az eredő vektor és a nagysága = [ 0.4565871 -0.07856886] 0.46329779007063054